%% @author diana
%% @doc @todo Add description to test.


-module(maxteilsummeMatrix).

%% ====================================================================
%% API functions
%% ====================================================================
-export([sumMatrix/1, maxSumme/1, zeitmessung/1]).



%% ====================================================================
%% Internal functions
%% ====================================================================

%% Die Methode liefert eine Liste aller Teilsummen mit entsprechenden Indizes in der Dreieck Matrix
%% Iteration durch i, tailrekursive Aufruf von "tailMatrix()"

sumMatrix([H|T]) -> sumMatrix([H|T], [], 0, 0).
sumMatrix([], Akk, _, _) -> Akk;
sumMatrix([H|T],Akk, I, J) -> sumMatrix(T,Akk ++ [teilMatrix([H|T], I + 1, J)], I + 1, J + 1).

%% Iteration durch j
teilMatrix([H|T], I, J) -> teilMatrix([H|T], 0, [], I, J).
teilMatrix([], _, Akku2, _, _) -> Akku2;
teilMatrix([H|T], Akku1, Akku2, I, J) -> teilMatrix(T, (Akku1 + H), Akku2 ++ [{Akku1 + H, {I, J + 1}}], I, J + 1).

%% Aus der Summen Matrix wird MaxSumme ausgesucht, die entsprechende Indizes werden ausgegeben
maxSumme([H|T]) -> maxSumme(lists:flatten(sumMatrix([H|T])), 0, []).
maxSumme([], MaxSumme, Index) -> {MaxSumme, Index};
maxSumme([H|T], MaxSumme, Index) ->  case hd(tuple_to_list(H)) > MaxSumme of
										  true -> maxSumme(T, hd(tuple_to_list(H)), hd(tl(tuple_to_list(H))));
										  false -> maxSumme(T, MaxSumme, Index) end.

%% Zeitmessung
zeitmessung(File) -> timer:tc(maxteilsummeMatrix,maxSumme,
							  [read_file:fileIntoIntlist(read_file:fileToString(File))]).

%% [1,2,3,-4,5,-1,-2] -> {7,{1,5}}.




